package com.sxj.corejava.code09_集合.List;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * @author 石小俊
 */
public class Test07_用户管理系统 {

    private static Scanner sc = new Scanner(System.in);
    private static List<User> users = new ArrayList<>();

    public static void main(String[] args) {
        showMenu();
    }

    public static void showMenu() {
        System.out.println("***********************欢迎使用用户管理系统***********************");
        System.out.print("请选择服务(1.添加用户 2.查询所有用户 3.根据编号查询用户 4.修改用户 5.删除用户 6.退出):");
        int choice = sc.nextInt();
        switch (choice) {
            case 1:
                addUser();
                break;
            case 2:
                findAll();
                break;
            case 3:
                findById();
                break;
            case 4:
                modifyUser();
                break;
            case 5:
                deleteUser();
                break;
            case 6:
                System.out.println("提示:您已经退出,欢迎下次使用");
                break;
            default:
                System.out.println("错误:您输入的选项有误,请重新输入");
                showMenu();
        }
    }

    /**
     * 添加用户信息,提示用户循环输入用户的信息,存储到ArrayList集合中
     */
    public static void addUser() {
        System.out.println("******************添加用户信息******************");
        User user = new User();
        System.out.print("请输入用户编号:");
        user.setId(sc.nextInt());
        System.out.print("请输入用户姓名:");
        user.setName(sc.next());
        System.out.print("请输入用户年龄:");
        user.setAge(sc.nextInt());
        // 将新增的用户添加到集合中
        users.add(user);
        // 回到主菜单
        showMenu();
    }

    /**
     * 查询所有用户信息,输出集合中所有用户的信息
     */
    public static void findAll() {
        System.out.println("******************用户列表******************");
        System.out.println("编号\t姓名\t年龄");
        for (User user : users) {
            System.out.println(user.getId() + "\t" + user.getName() + "\t" + user.getAge());
        }
        showMenu();
    }

    /**
     * 根据编号查询指定用户信息
     */
    public static void findById() {
        System.out.println("******************根据编号查询用户信息******************");
        System.out.print("请输入用户编号:");
        int id = sc.nextInt();
        User user = find(id);
        if (user == null) {
            System.out.println("错误:您查询的用户不存在,请检查编号是否正确!");
        } else {
            System.out.println(user);
        }
        showMenu();
    }

    public static User find(int id) {
        for (User user : users) {
            if (id == user.getId()) {
                return user;
            }
        }
        return null;
    }

    /**
     * 根据编号修改指定用户信息
     */
    public static void modifyUser() {
        System.out.println("******************修改用户信息******************");
        System.out.print("请输入需要修改的用户的编号:");
        int id = sc.nextInt();
        User user = find(id);
        if (user == null) {
            System.out.println("错误:该用户不存在,请检查编号是否正确！");
        } else {
            System.out.print("请输入用户姓名:");
            user.setName(sc.next());
            System.out.print("请输入用户年龄:");
            user.setAge(sc.nextInt());
            System.out.println("提示:恭喜您,修改成功");
        }
        showMenu();
    }

    /**
     * 根据编号删除指定用户信息
     */
    public static void deleteUser() {
        System.out.println("******************删除用户信息******************");
        System.out.print("请输入需要删除的用户的编号:");
        int id = sc.nextInt();
        User user = find(id);
        if (user == null) {
            System.out.println("错误:对不起,您删除的用户不存在,请检查编号是否正确");
        } else {
            users.remove(user);
            System.out.println("提示:恭喜您,删除成功");
        }
        showMenu();
    }
}

/**
 * 定义一个用户类User,属性:id、name、age
 */
class User {
    private int id;
    private String name;
    private int age;

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
